// 引入模块
const fs = require('fs'),
  path = require('path'),
  express = require('express'),
  qs = require('querystring')

// 创建服务器
const app = express()

// 设置请求头, 解决跨域问题
app.all('*', (request, response, next) => {
  response.header('Access-Control-Allow-Origin', '*')
  response.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
  response.header('Access-Control-Allow-Headers', 'Content-Type, Authorization')
  next()
})

// 处理post请求传入的数据
app.use(express.json())
// 处理get请求传入的数据
app.use(express.urlencoded())

// 响应静态资源
app.use(express.static(path.join(__dirname, './dist')))

// 读取文件函数
const readFile = () => JSON.parse(fs.readFileSync(path.join(__dirname, './data/data.json'), 'utf8') || '[]');

// 接口
// 获取数据
app.post('/getfilterlist', (request, response) => {
	// console.log(111);
	// console.log(request.body);
	// 获取传入的数据
	const body = request.body;
	// 读取文件
  const file = readFile()
  // 根据输入框和选择框的值筛选数据
  const filterFormFile = file.filter(v => v.name.includes(body.name) && v.sex.includes(body.sex))
  const allClass = filterFormFile.reduce((res, item) => {
    if (res.some(v => item.class === v)) return res
    res.push(item.class)
    return res
  }, [])
  // 根据页码值和条数截取数据
  const filterSliceFile = filterFormFile.slice((body.curPage - 1) * body.pageSize, body.curPage * body.pageSize);
	response.send({
		code: 200,
		msg: '成功',
		data: filterSliceFile,
		pageTotal: Math.ceil(filterFormFile.length / body.pageSize),
    total: filterFormFile.length,
    allClass
	});
});

// 添加学生
app.post('/add', (request, response) => {
  // console.log(request.body)
  // 读取文件
  const file = readFile()
  // 添加这一项
  file.push(request.body.data)
  // 写入文件
  fs.writeFileSync(path.join(__dirname, './data/data.json'), JSON.stringify(file))
  // 响应
  response.send({
    code: 200,
    msg: '学生添加成功'
  })
})

// 编辑学生
// app.post('/edit', (request, response) => {

// })

// 删除学生
app.get('/del', (request, response) => {
  // console.log(+request.query.id)
  const id = +request.query.id
  // 获取文件
  const file = readFile()
  // 获取对应项删除
  file.splice(file.findIndex(v => v.id === id), 1)
  // 重新写入问价
  fs.writeFileSync(path.join(__dirname, './data/data.json'), JSON.stringify(file))
  response.send({
    code: 200,
    msg: '删除成功'
  })
})

// 保存接口
app.post('/save', (request, response) => {
  console.log(request.body)
  const {id, name, age, class: className, sex} = request.body
  // 读取文件
  const file = readFile()
  // 根据id 找到对应项
  const item = file.find(v => v.id === id)
  // 修改对应属性
  item.name = name
  item.age = age
  item.class = className
  item.sex = sex
  // 重新写入文件
  fs.writeFileSync(path.join(__dirname, './data/data.json'), JSON.stringify(file))
  // 响应
  response.send({
    code: 200,
    msg: '保存成功'
  })
})

// 监听端口
const port = 25040
app.listen(port, () => console.log('app is running at http://localhost:' + port))
